package com.huike.clues.service;

import com.huike.clues.domain.TbClue;
import com.huike.clues.domain.vo.ImportDataVO;
import com.huike.clues.domain.vo.TbClueExcelVo;

import java.util.List;

/**
 * @author EthanRuins
 * @date 2023/7/12
 * @apiNote
 */
public interface ITbClueService {
    /**
     * 新增线索
     * @param clue 线索
     * @return 影响行数
     */
    int insert(TbClue clue);

    /**
     * 修改线索管理
     * @param clue 线索数据
     * @return 影响行数
     */
    int update(TbClue clue);

    /**
     * 根据线索ID更新状态
     * @param clueId 线索ID
     * @param status 状态
     * @return 影响行数
     */
    int updateStatus(Long clueId, String status);

    /**
     * 根据ID获取线索数据
     * @param id 线索ID
     * @return 线索数据
     */
    TbClue getById(Long id);

    /**
     * 根据指定条件查询线索列表
     * @param clue 线索条件
     * @return 线索列表
     */
    List<TbClue> getClueList(TbClue clue);

    /**
     * 根据指定条件查询线索池列表
     * @param clue 线索条件
     * @return 线索池列表
     */
    List<TbClue> getCluePool(TbClue clue);

    /**
     * 检验手机号是否唯一
     * @param phone 手机号
     * @return true-手机号存在  false-手机号不存在
     */
    boolean checkPhoneUnique(String phone);

    /**
     * 批量分配线索
     * @param ids    线索ID
     * @param userId 用户ID
     * @return 分配结果
     */
    String assign(Long[] ids, Long userId);

    /**
     * 批量捞取线索
     * @param ids    线索ID
     * @param userId 捞取人ID
     * @return 捞取结果
     */
    String gain(Long[] ids, Long userId);

    /**
     * 伪线索
     * @param clueId 线索ID
     * @param reason 伪线索原因
     * @param remark 标注
     * @return 影响行数
     */
    int falseClue(Long clueId, String reason, String remark);

    /**
     * 导入线索数据
     * @param tbClueExcelVo 读取到的每行数据
     * @return 影响行数
     */
    ImportDataVO importCluesData(TbClueExcelVo tbClueExcelVo);
}
